package com.micro.ai.auth.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.micro.ai.auth.entity.MenuI18n;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 菜单国际化Mapper接口
 * 
 * @author micro-ai
 * @since 0.0.1
 */
@Mapper
public interface MenuI18nMapper extends BaseMapper<MenuI18n> {

    /**
     * 根据菜单ID查询国际化信息
     * 
     * @param menuId 菜单ID
     * @return 国际化信息列表
     */
    @Select("SELECT * FROM menu_i18n WHERE menu_id = #{menuId} ORDER BY locale")
    List<MenuI18n> selectByMenuId(@Param("menuId") String menuId);

    /**
     * 根据菜单ID和语言代码查询国际化信息
     * 
     * @param menuId 菜单ID
     * @param locale 语言代码
     * @return 国际化信息
     */
    @Select("SELECT * FROM menu_i18n WHERE menu_id = #{menuId} AND locale = #{locale} LIMIT 1")
    MenuI18n selectByMenuIdAndLocale(@Param("menuId") String menuId, @Param("locale") String locale);

    /**
     * 根据菜单ID列表和语言代码查询国际化信息
     * 
     * @param menuIds 菜单ID列表
     * @param locale 语言代码
     * @return 国际化信息列表
     */
    @Select("<script>" +
            "SELECT * FROM menu_i18n WHERE menu_id IN " +
            "<foreach collection='menuIds' item='menuId' open='(' separator=',' close=')'>" +
            "#{menuId}" +
            "</foreach>" +
            " AND locale = #{locale}" +
            "</script>")
    List<MenuI18n> selectByMenuIdsAndLocale(@Param("menuIds") List<String> menuIds, @Param("locale") String locale);

    /**
     * 批量插入国际化信息
     * 
     * @param i18nList 国际化信息列表
     */
    @Insert("<script>" +
            "INSERT INTO menu_i18n (id, menu_id, locale, name, description, title, subtitle, created_at, updated_at) VALUES " +
            "<foreach collection='i18nList' item='i18n' separator=','>" +
            "(#{i18n.id}, #{i18n.menuId}, #{i18n.locale}, #{i18n.name}, #{i18n.description}, #{i18n.title}, #{i18n.subtitle}, #{i18n.createdAt}, #{i18n.updatedAt})" +
            "</foreach>" +
            "</script>")
    void batchInsert(@Param("i18nList") List<MenuI18n> i18nList);

    /**
     * 批量更新国际化信息
     * 
     * @param i18nList 国际化信息列表
     */
    @Update("<script>" +
            "<foreach collection='i18nList' item='i18n' separator=';'>" +
            "UPDATE menu_i18n SET name = #{i18n.name}, description = #{i18n.description}, title = #{i18n.title}, subtitle = #{i18n.subtitle}, updated_at = #{i18n.updatedAt} WHERE id = #{i18n.id}" +
            "</foreach>" +
            "</script>")
    void batchUpdate(@Param("i18nList") List<MenuI18n> i18nList);

    /**
     * 根据菜单ID删除国际化信息
     * 
     * @param menuId 菜单ID
     */
    @Delete("DELETE FROM menu_i18n WHERE menu_id = #{menuId}")
    void deleteByMenuId(@Param("menuId") String menuId);

    /**
     * 根据菜单ID列表删除国际化信息
     * 
     * @param menuIds 菜单ID列表
     */
    @Delete("<script>" +
            "DELETE FROM menu_i18n WHERE menu_id IN " +
            "<foreach collection='menuIds' item='menuId' open='(' separator=',' close=')'>" +
            "#{menuId}" +
            "</foreach>" +
            "</script>")
    void batchDeleteByMenuIds(@Param("menuIds") List<String> menuIds);
}
